﻿/*
计算N! 
Time Limit:1000MS  Memory Limit:32768K


Description:
yaojian最近学了一个新的运算法则——阶乘，但他很懒，不想一步一步计算，所以他想让你来帮他编一个程序，能马上得到N的阶乘。

Input:
输入包含若干行数据，每行都有一个整数N(0<=N<=200)。 
Output:
与输入相对应每行输出N的阶乘。 
Sample Input:
2
4
Sample Output:
2
24
*/

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
	vector<unsigned> nums;

	{
		for (unsigned n; cin>>n ;nums.push_back(n))
			;
	}
	sort(nums.begin(), nums.end());
	unsigned  maximum=nums.back();
	//unsigned  maximum= *max_element(nums.begin(), nums.end());

	vector<unsigned> fact(1024);
	fact[0]=1U;
	vector<unsigned>::size_type tail=1U;

	vector<unsigned>::size_type pos=0;
	for (unsigned n=2; n<=maximum; n++)
	{	
		unsigned carry=0U;		
		{
			for (vector<unsigned>::size_type i=0; i<tail; ++i)
			{
				unsigned product=fact[i]*n+carry;			
				fact[i]=product%10;
				carry=product/10;
				
				if(carry && i==(tail-1))
				{
					tail++;
				}
			}
		}
		if(0==nums[pos] || 1==nums[pos])
		{
			cout<<1<<endl;
			++pos;
			continue;
		}
		else if(n==nums[pos])
		{
			for (vector<unsigned>::size_type i=tail; i--; )
			{
				cout<<fact[i];
			}
			cout<<endl;
			++pos;
		}
	
	}

	return 0;
}
